/**
 * WiFi连接控制接口类
 * 
 * @author 张翔宇
 * @since 2024年9月2日
 */
#ifndef WIFI_MANAGER_H
#define WIFI_MANAGER_H

#include "esp_event.h"
#include "esp_wifi.h"
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"

// WiFi连接成功位
#define WIFI_CONNECTED_BIT   BIT0
// WiFi连接失败位
#define WIFI_FAIL_BIT        BIT1

/**
 * WiFiManager类定义
 */
typedef struct {
    // WiFi事件组，用于同步WiFi连接状态
    EventGroupHandle_t event_group;
    // 重试次数计数器
    int retry_num;
    // WiFi事件处理实例
    esp_event_handler_instance_t instance_any_id;
    // IP事件处理实例
    esp_event_handler_instance_t instance_got_ip;
} WiFiManager;

/**
 * 初始化WiFiManager类
 * 设置WiFi事件处理器和初始化WiFi配置
 */
void wifi_manger_init(WiFiManager* manager);

/**
 * 启动WiFi连接
 * 配置WiFi并开始连接
 */
void wifi_manger_start(WiFiManager* manager);

/**
 * 停止WiFi连接并清理资源
 */
void wifi_manger_stop(WiFiManager* manager);

#endif